package com.dragon.english_practice_back.service.impl;

import cn.hutool.json.JSONUtil;
import com.dragon.english_practice_back.service.GrammarsScheduleService;
import com.dragon.english_practice_back.service.PromptRefineFactory;
import com.dragon.english_practice_back.service.WordScheduleService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

@Service
@Slf4j
@AllArgsConstructor
public class PromptRefineFactoryImpl implements PromptRefineFactory {
    WordScheduleService wordScheduleService;
    GrammarsScheduleService grammarsScheduleService;


    @Override
    public String getStrangeWordPrompt(int userId) {
        String strangeWord = JSONUtil.toJsonStr(wordScheduleService.getWordsFromSchedule(userId, 3));
        String prompt =
                """
                    
                 你需要在回答中尽可能插入下列单词
                 (数据格式是JSON的,其中id是单词的id,word是英语单词,meaning是单词的意思,proficiency是用户对单词的熟练度):
                 
                 """
                 + strangeWord
                 + """
                 
                 尽可能使用这些单词回答用户的问题,尽可能多地使用proficiency低的单词
                 
                 """
                ;
        log.debug("在prompt中插入了这些单词{}", strangeWord);
        return prompt;
    }

    @Override
    public String addStrangeWord(int userId, String prompt) {
        return prompt + getStrangeWordPrompt(userId);
    }

    @Override
    public String getGrammarPrompt(int userId) {
        String grammar = JSONUtil.toJsonStr(grammarsScheduleService.getRandomGrammars(userId,3));
        String prompt =
                """
                        
                        你需要在回答中尽可能插入下列语法(数据格式是JSON的,其中id是语法的id,grammar是语法,example是示例或简单的语法解释,proficiency是用户对语法的熟练度):
                        
                        """
                        + grammar
                        + """
                        
                        尽可能使用这些语法回答用户的问题,尽可能多地使用proficiency低的语法
                        
                        """
                ;
        log.debug("在prompt中插入了这些语法{}", grammar);
        return prompt;
    }

    @Override
    public String addGrammar(int userId, String prompt) {
        return prompt + getGrammarPrompt(userId);
    }
}
